package com.hsnn.medstgmini.settlement.service.impl;

import java.util.List;
import java.util.Map;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hsnn.medstgmini.settlement.dao.BankAcctInfoDao;
import com.hsnn.medstgmini.settlement.dao.SetBankInfoDao;
import com.hsnn.medstgmini.settlement.model.SetAcctInfo;
import com.hsnn.medstgmini.settlement.model.SetBankAcctInfo;
import com.hsnn.medstgmini.settlement.model.SetBankArea;
import com.hsnn.medstgmini.settlement.model.SetBankInfo;
import com.hsnn.medstgmini.settlement.model.form.BankAcct;
import com.hsnn.medstgmini.settlement.model.form.BankAcctLog;
import com.hsnn.medstgmini.settlement.service.BankAcctInfoManager;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 帐户、银行卡管理
 * @author 蔡春龙
 * @date 2015年7月21日
 */
@Service
public class BankAcctInfoManagerImpl implements BankAcctInfoManager {

	@Autowired
	private BankAcctInfoDao bankAcctInfoDao;
	
	@Autowired
	private SetBankInfoDao setBankInfoDao;

	/**
	 * @category 获取帐户信息
	 * @date 2015年7月21日
	 * @param user当前登陆人
	 * @return
	 */
	@Override
	public SetAcctInfo getAcctInfo(SysUser user) {
		return bankAcctInfoDao.getAcctInfo(user);
	}

	/**
	 * @category 根据id查询帐户信息
	 * @date 2015年7月23日
	 * @param orgId
	 * @return
	 */
	public SetAcctInfo getAcctInfoById(String orgId) {
		return bankAcctInfoDao.getAcctInfoById(orgId);
	}

	/**
	 * @category 查询银行卡列表
	 * @date 2015年7月21日
	 * @param page翻页参数
	 * @param bankAcct查询参数
	 * @param user登陆人
	 * @return
	 */
	public Pagination getBankAcctInfoList(Pagination page,
			SetBankAcctInfo bankAcct, SysUser user) {
		return bankAcctInfoDao.getBankAcctInfoList(page, bankAcct, user);
	}

	/**
	 * @category 根据帐户id查询银行卡列表
	 * @date 2015年7月21日
	 * @param page翻页参数
	 * @param bankAcct查询参数
	 * @return
	 */
	public Pagination getBankAcctInfoList(Pagination page,
			SetBankAcctInfo bankAcct) {
		return bankAcctInfoDao.getBankAcctInfoList(page, bankAcct);
	}

	/**
	 * @category 获取开户行
	 * @date 2015年7月21日
	 * @param page翻页参数
	 * @param user登陆人
	 * @return
	 */
	public List<Map<String, String>> getBankList() {
		return bankAcctInfoDao.getBankList();
	}

	/**
	 * @category 查询银行支行列表
	 * @date 2015年7月21日
	 * @param page翻页参数
	 * @param bankInfo查询参数
	 * @param user登陆人
	 * @return
	 */
	public Pagination getSubBankAcctInfoList(Pagination page,
			SetBankInfo bankInfo) {
		return bankAcctInfoDao.getSubBankAcctInfoList(page, bankInfo);
	}

	/**
	 * @category 查询银行地区列表
	 * @date 2015年7月22日
	 * @param bankArea
	 * @return
	 */
	public List<SetBankArea> getBankAreaList(SetBankArea bankArea) {
		return bankAcctInfoDao.getBankAreaList(bankArea);
	}

	/**
	 * @category 保存银行帐户信息
	 * @date 2015年7月22日
	 * @param bankAcct
	 * @param user
	 */
	@Transactional
	public void saveBankAcctInfo(SetBankAcctInfo bankAcct, SysUser user) {
		bankAcctInfoDao.saveBankAcctInfo(bankAcct, user);
	}

	/**
	 * @category 保存银行帐户审核信息
	 * @date 2015年7月22日
	 * @param bankAcct
	 * @param user
	 */
	@Transactional
	public void saveAuditBankAcctInfo(SetBankAcctInfo bankAcct, SysUser user) {
		bankAcctInfoDao.saveAuditBankAcctInfo(bankAcct, user);
	}
	
	/**
	 * @category 中心、卫生局编辑银行帐户信息
	 * @date 2015年7月22日
	 * @param bankAcct
	 * @param user
	 */
	@Transactional
	public void saveBankAcctInfoByCenter(SetBankAcctInfo bankAcct, SysUser user) {
		bankAcctInfoDao.saveBankAcctInfoByCenter(bankAcct, user);
	}

	/**
	 * @category 中心根据orgType查询帐户列表
	 * @date 2015年7月22日
	 * @param acctInfo
	 *            (orgType参考UserType枚举)
	 * @return
	 */
	public Pagination getAcctInfoList(SetAcctInfo acctInfo, Pagination page) {
		return bankAcctInfoDao.getAcctInfoList(acctInfo, page);
	}

	/**
	 * @category 根据银行帐户id查询
	 * @date 2015年7月22日
	 * @param bankAcctId
	 * @return
	 */
	public SetBankAcctInfo getBankAcctById(String bankAcctId) {
		return bankAcctInfoDao.getBankAcctById(bankAcctId);
	}

	/**
	 * @category 查询银行卡日志
	 * @date 2015年7月23日
	 * @param bankAcctLog
	 * @param page
	 * @return
	 */
	public Pagination getBankAcctLogList(BankAcctLog bankAcctLog,
			Pagination page) {
		return bankAcctInfoDao.getBankAcctLogList(bankAcctLog, page);
	}

	/**
	 * @category 查询核算中心能审核的医疗机构账户列表
	 * @date 2015年7月24日
	 * @param acctInfo
	 * @param user
	 * @return
	 */
	public Pagination getAuditHospAcctList(SetAcctInfo acctInfo, SysUser user,
			Pagination page) {
		return bankAcctInfoDao.getAuditHospAcctList(acctInfo, user, page);
	}

	/**
	 * @category 根据银行账户的id及当前用户设置默认账户
	 * @author 韩守松
	 * @date 2015年7月27日
	 * @param @param page
	 * @param @param setBankAcctInfo
	 * @param @return
	 */
	public void setDefaultAcctInfoById(Pagination page,
			SetBankAcctInfo setBankAcctInfo, SysUser user) {
		bankAcctInfoDao.setDefaultAcctInfoById(page, setBankAcctInfo, user);
	}

	/**
	 * @category 核算中心查询医疗机构审核列表
	 * @date 2015年7月30日
	 * @param bankAcct
	 * @param page
	 * @param user
	 * @return
	 */
	public Pagination getAuditHospAcctInfoList(BankAcct bankAcct,
			Pagination page, SysUser user) {
		return bankAcctInfoDao.getAuditHospAcctInfoList(bankAcct, page, user);
	}
	
	/**
	 * @category 中心查询医疗机构、配送企业审核列表
	 * @date 2015年7月30日
	 * @param bankAcct
	 * @param page
	 * @return
	 */
	public Pagination getAuditAcctInfoList(BankAcct bankAcct, Pagination page) {
		return bankAcctInfoDao.getAuditAcctInfoList(bankAcct, page);
	}
	
	/**
	 * @category 校验银行卡号是否存在
	 * @date 2015年8月11日
	 * @param bankAcct
	 * @return
	 */
	public boolean checkSameBankAcctNo(SetBankAcctInfo bankAcct) {
		return bankAcctInfoDao.checkSameBankAcctNo(bankAcct);
	}

	/**
	 * @category 中心查询医疗机构
	 * @date 2015年8月12日13:22:20
	 * @author 应晓川
	 * @param Pagination page
	 * @return
	 */
	@Override
	public Pagination getAcctInfoList(Pagination page) {
		return bankAcctInfoDao.getAcctInfoList(page);
	}

	@Override
	public SetBankInfo getBankInfoById(String bankCode) {
		return setBankInfoDao.getBankInfoByBankCode(bankCode);
		
	}
	
}